//
//  WBTabBar.swift
//  WBWeiBo
//
//  Created by 王斌 on 16/7/9.
//  Copyright © 2016年 王斌. All rights reserved.
//

import UIKit

//定义协议必须继承NSObjextProtocol,才能用weak关键对属性进行弱引用
protocol WBTabBarDelegate:NSObjectProtocol
{
    func didSelectedComposeButton()
}


class WBTabBar: UITabBar
{
    // 点击撰写按钮的闭包
    var composeButtonClosure:(()->())?
    
    // 定义代理对象
    weak var wbDelegate: WBTabBarDelegate?
    
    
    // MARK:   --懒加载控件
    private lazy var composeButton:UIButton = {
        
        let button = UIButton()
        //添加点击事件
        button.addTarget(self, action: "composeButtonAction", forControlEvents: .TouchUpInside)
        
        //设置按钮图片
        button.setImage(UIImage(named: "tabbar_compose_icon_add"), forState: .Normal)
        
        //按钮高亮图片
        button.setImage(UIImage(named: "tabbar_compose_icon_add_highlighted"), forState: .Selected)
        
        //设置按钮背景图片
        button.setBackgroundImage(UIImage(named: "tabbar_compose_button"), forState: .Normal)
        
        //设置按钮高亮背景图片
        button.setBackgroundImage(UIImage(named: "tabbar_compose_button_highlighted"), forState: .Selected)
        
        button.sizeToFit()
        
        return button
    }()
    
    
    override init(frame: CGRect)
    {
        super.init(frame: frame)
        
        addSubview(composeButton)
    }
    
    //加载xib或者storyboard才会调用
    required init?(coder aDecoder: NSCoder)
    {
        fatalError("init(coder:) has not been implemented")
    }
    
    
    
    // MARK:  -- 点击事件
    
    // 使用private修饰函数在我们swift的运动循环里面找不到,swift是编译语言,在编译的时候就知道我们要调用哪个函数,因为swift追求性能
    
    // 解决办法 - @objc
    
    // @onjc 表示我们使用oc的动态运行机制调用这个函数

    @objc private func composeButtonAction(){
        
        //  使用'?'判断这个闭包是否为nil,如果为nil,则不执行后面的代码,否则执行
        composeButtonClosure?()
        
        //  使用代理对象调用
        wbDelegate?.didSelectedComposeButton()
    }
    
    
    //布局
    override func layoutSubviews() {
        super.layoutSubviews()
        
        //  设置撰写按钮的中心点
        composeButton.centerX = width * 0.5
        composeButton.centerY = height * 0.5
        
        //  获取系统控件
        //  计算控件的宽度
        let itemWidth = width / 5
        
        //  记录遍历是第一个按钮
        var index = 0
        for value in subviews{
            
            // 这个类是私有 UITabBarButton.self 获取class
            if value.isKindOfClass(NSClassFromString("UITabBarButton")!){
                
                value.x = CGFloat(index) *  itemWidth
                value.width = itemWidth
                
                if index == 1{
                    index++
                }
                
                index++
            }
        }

    }
}
